package iooperator;

import java.io.File;
import java.io.IOException;

/**
 * @Filename: DiskOperation
 * @Author: czh
 * @Data:2023/7/4 9:25
 * 磁盘操作(File)
 */
public class DiskOperation {
    public static void main(String[] args) {
        // 定义一个文件
        File file = new File("D:\\workspace\\java\\src\\iooperator\\文件.docx");
        File fileNew = new File("D:\\workspace\\java\\src\\iooperator\\文件NEW.docx");
        // 定义一个文件目录
//        File file = new File("D:\\workspace\\java\\src\\iooperator");
        // 定义一个相对路劲
//        File file = new File("iooperator\\文件.docx");
        System.out.println("当前文件所在地址:" + file);
        //1. 文件检测相关的方法
        // 判断文件是否存在(相对路径返回false)
        System.out.println("当前文件是否存在:" + file.exists());
        // 判断文件是目录或者文件
        System.out.println("当前文件是否是文件:" + file.isFile());
        System.out.println("当前文件是否是目录:" + file.isDirectory());
        // 判断file对应的文件或者目录是否是绝对路径
        System.out.println("当前文件是否是绝对路径:" + file.isAbsolute());
        //2.文件操作方法和目录相关方法
        // 创建文件
        try {
            System.out.println("创建文件是否成功:" + file.createNewFile());
        } catch (IOException e) {
            System.out.println("创建文件失败");
        }
        // 删除文件
//        System.out.println("删除文件是否成功:" + file.delete());
        // 创建单级目录
//        file.mkdir();
        // 创建多级目录
//        file.mkdirs();
        // 列出file目录下所有子文件和路径名
//        String[] lists = file.list();
//        for (String list : lists) {
//            System.out.print(list + ",");
//        }
        System.out.println();
        // 3. 文件名相关的方法：
        // 获取file的绝对路径
        System.out.println(file.getAbsolutePath());
        //
        System.out.println(file.getPath());
        // 获取文件名
        System.out.println("当前文件名称是:" + file.getName());
        // 将文件剪切到一个新路径
//        file.renameTo(fileNew);
        System.out.println("-------------------------------------");
        File fileDir = new File("D:\\Program Files\\Java\\jre1.8.0_311\\bin");
        readDir(fileDir, 0);
    }

    // 遍历目录，获取目录结构与文件
    public static void readDir(File file, int space) {
        for (int i = 0; i < space; i++) {
            System.out.print(" ");
        }
        System.out.println(file.getName());

        // 获取file的子文件和子目录
        File[] files = file.listFiles();
        for (File file1 : files) {
            if (file1.isDirectory()) {
                readDir(file1, space + 2);
            } else {
                for (int i = 0; i < space + 2; i++) {
                    System.out.print(" ");
                }
                System.out.println(file1.getName());
            }
        }
    }
}
